package com.mindskip.xzs.domain.enums;
//定义了一个题目类型的枚举 `QuestionTypeEnum`，其中包含了单选题、多选题、判断题、填空题和简答题这几种题目类型。
//展示题目类型：前端可以通过 `QuestionTypeEnum` 枚举值来展示题目类型的名称，比如在题目编辑页面或题目列表中展示题目类型。
//根据题目类型执行不同逻辑：前端可以根据题目类型的不同执行不同的逻辑，比如在题目录入时根据题目类型展示不同的输入框或选项。
//根据题目类型判断是否需要保存文本内容：通过 `needSaveTextContent` 方法可以根据题目类型判断是否需要保存文本内容，这对于题目的数据处理和存储是有帮助的。

//提供题目类型的枚举值：后端可以使用 `QuestionTypeEnum` 枚举值来表示题目的类型，并通过枚举值的 `code` 和 `name` 属性来处理和展示题目类型。
//根据 code 获取对应的 QuestionTypeEnum 枚举值**：后端可以通过 `fromCode` 方法根据传入的 code 获取对应的 `QuestionTypeEnum` 枚举值。
//判断题型是否需要保存文本内容：后端可以使用 `needSaveTextContent` 方法来判断题目类型是否需要保存文本内容，从而在存储题目数据时做出相应的处理。

import java.util.HashMap;
import java.util.Map;

// 定义题目类型的枚举 QuestionTypeEnum
public enum QuestionTypeEnum {

    // 枚举值 SingleChoice，表示单选题，code为1，name为"单选题"
    SingleChoice(1, "单选题"),
    // 枚举值 MultipleChoice，表示多选题，code为2，name为"多选题"
    MultipleChoice(2, "多选题"),
    // 枚举值 TrueFalse，表示判断题，code为3，name为"判断题"
    TrueFalse(3, "判断题"),
    // 枚举值 GapFilling，表示填空题，code为4，name为"填空题"
    GapFilling(4, "填空题"),
    // 枚举值 ShortAnswer，表示简答题，code为5，name为"简答题"
    ShortAnswer(5, "简答题");

    int code; // 枚举值的 code 属性
    String name; // 枚举值的 name 属性

    // 枚举值的构造函数，传入 code 和 name 初始化枚举值
    QuestionTypeEnum(int code, String name) {
        this.code = code;
        this.name = name;
    }

    // 创建一个静态的 Map 对象 keyMap，用于存储 code 和对应的 QuestionTypeEnum 枚举值
    private static final Map<Integer, QuestionTypeEnum> keyMap = new HashMap<>();

    // 在静态代码块中将所有枚举值放入 keyMap 中
    static {
        for (QuestionTypeEnum item : QuestionTypeEnum.values()) {
            keyMap.put(item.getCode(), item);
        }
    }

    // 根据 code 获取对应的 QuestionTypeEnum 枚举值
    public static QuestionTypeEnum fromCode(Integer code) {
        return keyMap.get(code);
    }

    // 判断题型是否需要保存文本内容，返回 true 或 false
    public static boolean needSaveTextContent(Integer code) {
        QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(code);
        switch (questionTypeEnum) {
            case GapFilling:
            case ShortAnswer:
                return true;
            default:
                return false;
        }
    }

    // 获取枚举值的 code
    public int getCode() {
        return code;
    }

    // 设置枚举值的 code
    public void setCode(int code) {
        this.code = code;
    }

    // 获取枚举值的 name
    public String getName() {
        return name;
    }

    // 设置枚举值的 name
    public void setName(String name) {
        this.name = name;
    }

}
